#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "topmenubar.h"
#include "controlpanel.h"
#include "devicepanel.h"
#include "infopanel.h"
#include "videodisplaywidget.h"
#include "bottomstatuswidget.h"
#include "logindialog.h"
#include "networkmanager.h"
#include "logmanager.h"
#include "playbackwidget.h"


class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    TopMenuBar *topMenuBar;
    ControlPanel *controlPanel;
    DevicePanel *devicePanel;
    InfoPanel *infoPanel;
    VideoDisplayWidget *videoDisplayWidget;
    BottomStatusWidget *bottomStatusWidget;
    LoginDialog *loginDialog;        // 登录对话框
    NetworkManager *networkManager;  // 网络管理器
    LogManager *logManager;          // 日志管理器
    PlaybackWidget *playbackwidget;

    // 布局相关
    void setupUI();
    void setupConnections();

protected:
    // 键盘事件处理
    void keyPressEvent(QKeyEvent *event) override;

private slots:
    // 顶部菜单按钮被点击
    // 参数: mode - 被点击的模式
    void onTopMenuClicked(const QString &mode);

    // 设备被选中
    // 参数: deviceInfo - 设备信息
    void onDeviceSelected(const QString &deviceInfo);

    // PTZ控制请求
    // 参数: direction - 移动方向
    // 参数: action - 操作类型
    void onPTZControl(QString command);

    // 更新状态栏
    // 参数: status - 状态信息
    void updateStatusBar(const QString &status);

    // 切换通道
    // 参数: channelIndex - 通道索引
    void switchChannel(int channelIndex);

    // 刷新设备列表
    void refreshDeviceList();
    
    // 处理登录请求
    void handleLoginRequest(const QString& username, const QString& password);
    
    // 处理顶部菜单栏登录请求
    void handleTopMenuBarLoginRequest();
    
    // 处理注销请求
    void handleLogoutRequest();
    
    // 处理登录响应
    void handleLoginResponse(bool success, const QString& message);
    
    // 处理注册响应
    void handleRegisterResponse(bool success, const QString& message);

    //处理设备列表接收
    void handleDeviceListReceived(const QString& deviceListData);
    
    // 设置登录状态
    void setLoginStatus(bool loggedIn);
    
    // 处理网络错误
    void handleNetworkError(const QString& error);

    // 处理视频窗口单击事件
    void onVideoWidgetClicked(const QString &videoUrl);

    void onRecordInfo(const QString &time, const QString &msg);

    void onRecord_STM32_Info(const QString& message);

};

#endif // MAINWINDOW_H
